// 知识点：可以通过一个名为move()的函数来获得绑定到左值上的右值引用，头文件为utility,move告诉编译器，我有一个左值，但是我想像一个右值一样处理它：除了赋值或者销毁，不能再使用它，使用move时应为std::move
// String(const String &rhs) //拷贝构造函数
// {
//   range_initializer(rhs.elements, rhs.end);
//   cout << "拷贝构造函数" << endl;
// }
// String &operator=(const String &rhs) //拷贝赋值运算符
// {
//   auto newstr = alloc_n_copy(rhs.elements, rhs.end);
//   free();
//   elements = newstr.first;
//   end = newstr.second;
//   cout << "拷贝赋值运算符" << endl;
//   return *this;
// }
